<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 111  222  11111  444  555  777  101010
        // 先执行同步代码 打印 111
        //然后进到promise里，里面也是同步代码，
        //返回失败状态promise，打印222
        //下面的。then里的回调开始异步，所以放到回调队列等待
        //执行最下面的同步打印  111111

        //实例promise返回失败状态，穿透第33行的then进到catch，打印444
        //返回一个成功的promise，值是undefined
        //所以进到第42行的then，打印555， 且返回一个成功的promise，因为这里返回的promise第一个，第二个参数颠倒，所以reject是成功

        //然后进到第53 打印 777  因为抛出错误
        //所以进入到catch 返回一个失败的promise实例，值是undefined  打印101010

        console.log(111);

        const promise = new Promise((resolve, reject) => {
            reject();
            console.log(222);
        });

   const p2 = promise
            .then(() => {
                console.log(333);
                return new Promise((resolve) => {
                    reject();
                });
            })
            .catch(() => {
                console.log(444);
            })
            .then(() => {
                console.log(555);
                return new Promise((reject, resolve) => {
                    reject();
                    // resolve();
                });
            })
            .catch(() => {
                console.log(666);
                throw new Error("报错了~");
            })
            .then(() => {
                console.log(777);
                throw new Error("报错了~");
            })
            .then(() => console.log(888))
            .then(() => console.log(999))
            .catch(() => {
                console.log(101010)
                //测试返回一个成功的promise
                return new Promise((resolve, reject) => {
                    reject('chen');
                });
            });

        console.log(111111);

        // 测试p2的返回值和最后catch return的promise实例返回值保持一致
        console.log(p2 );
    </script>
</body>

</html>